/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.properties;
import java.util.ArrayList;
import javax.swing.AbstractListModel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.text.BadLocationException;
import org.openide.util.HelpCtx;
/**
*
* @author pjiricka
* @version
*/
public class ParamsPanel extends javax.swing.JPanel {
static final int DEFAULT_WIDTH = 350;
static final int DEFAULT_HEIGHT = 400;
// private String mainComment;
// it is assured that comments and arguments contain the same number of elements
// private ArrayList comments = new ArrayList(); // of String
/**
* @associates String
*/
private ArrayList arguments = new ArrayList(); // of String
private int editingRow = -1;
private ParamsListModel model;
static final long serialVersionUID =-3754019215574878093L;
/** Creates new form ParamsPanel */
public ParamsPanel() {
initComponents ();
paramsList.setModel(getListModel());
paramsList.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (paramsList.getSelectedIndex() != -1)
updateEditor(paramsList.getSelectedIndex());
removeParamButton.setEnabled(paramsList.getSelectedIndex() != -1);
}
}
);
removeParamButton.setEnabled(paramsList.getSelectedIndex() != -1);
HelpCtx.setHelpIDString (this, ParamsPanel.class.getName ());
}
public java.awt.Dimension getPreferredSize () {
java.awt.Dimension inh = super.getPreferredSize ();
return new java.awt.Dimension (Math.max (inh.width, DEFAULT_WIDTH), Math.max (inh.height, DEFAULT_HEIGHT));
}
public void setComment(String comment) {
mainCommentTextArea.setText(comment);
}
public String getComment() {
return mainCommentTextArea.getText();
}
/* public void setComment(String comment) {
parseComment(comment);
equalize();
if (getListModel().getSize() > 0)
getListModel().fireIntervalAdded(0, getListModel().getSize() - 1);
}
public String getComment() {
commitChanges();
return assembleComment();
}*/
public void setArguments(String[] args) {
arguments.clear();
for (int i = 0; i < args.length; i++) {
arguments.add(args[i]);
}
// equalize();
if (getListModel().getSize() > 0)
getListModel().fireIntervalAdded(0, getListModel().getSize() - 1);
if (getListModel().getSize() > 0)
editRow(0);
else
editRow(-1);
}
public String[] getArguments() {
commitChanges();
// j is the last non-empty index
int j = -1;
for (int i = 0; i < arguments.size(); i++)
if (((String)arguments.get(i)).trim().length() > 0)
j = i;
String[] args = new String[j + 1];
for (int i = 0; i <= j; i++)
args[i] = (String)arguments.get(i);
return args;
}
/* private void equalize() {
while (comments.size() < arguments.size())
comments.add("");
while (arguments.size() < comments.size())
arguments.add("");
}*/
private void commitChanges() {
//mainComment = mainCommentTextArea.getText();
if (editingRow != -1) {
//comments.set (editingRow, commentTextArea.getText());
arguments.set(editingRow, codePane.getText());
getListModel().fireContentsChanged(editingRow, editingRow);
}
}
/** Sets the index of the row being edited to row or disables editing if row == -1.
* Should only be called with -1 if there is no data */
private void editRow(int row) {
if (row != -1)
paramsList.setSelectedIndex(row);
else
paramsList.setSelectedIndices(new int[0]);
}
private void updateEditor(int row) {
commitChanges();
editingRow = row;
if (row == -1) {
//commentTextArea.setText("");
codePane.setText("");
//commentTextArea.setEnabled(false);
codePane.setEnabled(false);
}
else {
//commentTextArea.setText((String)comments.get(editingRow));
codePane.setText((String)arguments.get(editingRow));
//commentTextArea.setEnabled(true);
codePane.setEnabled(true);
codePane.requestFocus();
}
}
/** Fills values arguments and mainComment with fragments of the parameter comment */
/* private void parseComment(String comment) {
comments.clear();
String part;
int searchIndex = 0, lastSearchIndex = 0;
int index = 0;
while (searchIndex >= 0) {
String iStr = "{" + index + "}";
lastSearchIndex = searchIndex;
searchIndex = comment.indexOf(iStr, searchIndex);
if (searchIndex != -1) {
part = comment.substring(lastSearchIndex, searchIndex).trim();
putPart(part, index);
searchIndex += iStr.length();
int eqIndex = comment.indexOf("=", searchIndex);
if (eqIndex != -1 && comment.substring(searchIndex, eqIndex).trim().length() == 0)
searchIndex = eqIndex + "=".length();
}
index++;
}
part = comment.substring(lastSearchIndex).trim();
putPart(part, index);
}
private void putPart(String part, int index) {
if (index == 0) {
mainComment = part;
}
else {
comments.add(part);
}
}
private String assembleComment() {
StringBuffer comment = new StringBuffer(mainComment);
if (!mainComment.endsWith("\n"))
comment.append('\n');
for (int i = 0; i < comments.size(); i++) {
String x = "{" + i + "}";
String cur = (String)comments.get(i);
if (!cur.trim().startsWith(x))
cur = x + " = " + cur;
comment.append(cur);
if (!cur.endsWith("\n"))
comment.append('\n');
}
return comment.toString();
}*/
protected ParamsListModel getListModel() {
if (model == null)
model = new ParamsListModel ();
return model;
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the FormEditor.
*/
private void initComponents () {//GEN-BEGIN:initComponents
setLayout (new java.awt.GridBagLayout ());
java.awt.GridBagConstraints gridBagConstraints1;
setBorder (new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10)));
jPanel1 = new javax.swing.JPanel ();
jPanel1.setLayout (new java.awt.GridBagLayout ());
java.awt.GridBagConstraints gridBagConstraints2;
jPanel1.setBorder (new javax.swing.border.TitledBorder(
new javax.swing.border.EtchedBorder(), "Comment"));
jScrollPane1 = new javax.swing.JScrollPane ();
mainCommentTextArea = new javax.swing.JTextArea ();
mainCommentTextArea.setRows (4);
jScrollPane1.setViewportView (mainCommentTextArea);
gridBagConstraints2 = new java.awt.GridBagConstraints ();
gridBagConstraints2.gridwidth = 0;
gridBagConstraints2.gridheight = 0;
gridBagConstraints2.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints2.insets = new java.awt.Insets (0, 8, 8, 8);
gridBagConstraints2.weightx = 1.0;
gridBagConstraints2.weighty = 1.0;
jPanel1.add (jScrollPane1, gridBagConstraints2);
gridBagConstraints1 = new java.awt.GridBagConstraints ();
gridBagConstraints1.gridwidth = 0;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.weightx = 1.0;
gridBagConstraints1.weighty = 1.0;
add (jPanel1, gridBagConstraints1);
jPanel2 = new javax.swing.JPanel ();
jPanel2.setLayout (new java.awt.GridBagLayout ());
java.awt.GridBagConstraints gridBagConstraints3;
jPanel2.setBorder (new javax.swing.border.TitledBorder(
new javax.swing.border.EtchedBorder(), "Parameters"));
jScrollPane2 = new javax.swing.JScrollPane ();
paramsList = new javax.swing.JList ();
paramsList.setVisibleRowCount (3);
paramsList.setSelectionMode (javax.swing.ListSelectionModel.SINGLE_SELECTION);
jScrollPane2.setViewportView (paramsList);
gridBagConstraints3 = new java.awt.GridBagConstraints ();
gridBagConstraints3.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints3.insets = new java.awt.Insets (0, 8, 8, 8);
gridBagConstraints3.weightx = 1.0;
gridBagConstraints3.weighty = 1.0;
jPanel2.add (jScrollPane2, gridBagConstraints3);
jPanel3 = new javax.swing.JPanel ();
jPanel3.setLayout (new java.awt.GridBagLayout ());
java.awt.GridBagConstraints gridBagConstraints4;
addParamButton = new javax.swing.JButton ();
addParamButton.setText (org.openide.util.NbBundle.getBundle(ParamsPanel.class).getString("ParamsPanel.addParamButton.text"));
addParamButton.addActionListener (new java.awt.event.ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent evt) {
addParamButtonActionPerformed (evt);
}
}
);
gridBagConstraints4 = new java.awt.GridBagConstraints ();
gridBagConstraints4.gridwidth = 0;
gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints4.insets = new java.awt.Insets (0, 8, 8, 8);
gridBagConstraints4.weightx = 1.0;
jPanel3.add (addParamButton, gridBagConstraints4);
removeParamButton = new javax.swing.JButton ();
removeParamButton.setText (org.openide.util.NbBundle.getBundle(ParamsPanel.class).getString("ParamsPanel.removeParamButton.text"));
removeParamButton.addActionListener (new java.awt.event.ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent evt) {
removeParamButtonActionPerformed (evt);
}
}
);
gridBagConstraints4 = new java.awt.GridBagConstraints ();
gridBagConstraints4.gridwidth = 0;
gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints4.insets = new java.awt.Insets (0, 8, 8, 8);
gridBagConstraints4.weightx = 1.0;
jPanel3.add (removeParamButton, gridBagConstraints4);
jPanel4 = new javax.swing.JPanel ();
gridBagConstraints4 = new java.awt.GridBagConstraints ();
gridBagConstraints4.gridwidth = 0;
gridBagConstraints4.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints4.weightx = 1.0;
gridBagConstraints4.weighty = 1.0;
jPanel3.add (jPanel4, gridBagConstraints4);
gridBagConstraints3 = new java.awt.GridBagConstraints ();
gridBagConstraints3.gridwidth = 0;
gridBagConstraints3.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints3.weighty = 1.0;
jPanel2.add (jPanel3, gridBagConstraints3);
jLabel2 = new javax.swing.JLabel ();
jLabel2.setText (org.openide.util.NbBundle.getBundle(ParamsPanel.class).getString("ParamsPanel.jLabel2.text"));
gridBagConstraints3 = new java.awt.GridBagConstraints ();
gridBagConstraints3.gridwidth = 0;
gridBagConstraints3.insets = new java.awt.Insets (0, 8, 0, 8);
gridBagConstraints3.anchor = java.awt.GridBagConstraints.WEST;
jPanel2.add (jLabel2, gridBagConstraints3);
jScrollPane3 = new javax.swing.JScrollPane ();
codePane = new javax.swing.JEditorPane ();
codePane.setContentType ("text/x-java");
codePane.setFont (new java.awt.Font ("Courier New", 0, 11));
codePane.addFocusListener (new java.awt.event.FocusAdapter () {
public void focusLost (java.awt.event.FocusEvent evt) {
codePaneFocusLost (evt);
}
}
);
jScrollPane3.setViewportView (codePane);
gridBagConstraints3 = new java.awt.GridBagConstraints ();
gridBagConstraints3.gridwidth = 0;
gridBagConstraints3.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints3.insets = new java.awt.Insets (0, 8, 8, 8);
gridBagConstraints3.weightx = 1.0;
gridBagConstraints3.weighty = 1.0;
jPanel2.add (jScrollPane3, gridBagConstraints3);
gridBagConstraints1 = new java.awt.GridBagConstraints ();
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.weightx = 1.0;
gridBagConstraints1.weighty = 1.0;
add (jPanel2, gridBagConstraints1);
}//GEN-END:initComponents
private void codePaneFocusLost (java.awt.event.FocusEvent evt) {//GEN-FIRST:event_codePaneFocusLost
commitChanges();
}//GEN-LAST:event_codePaneFocusLost
private void removeParamButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeParamButtonActionPerformed
int index = paramsList.getSelectedIndex();
if (index == -1) return;
arguments.remove(index);
//comments.remove(index);
getListModel().fireIntervalRemoved(index, index);
if (index >= arguments.size()) index--;
editingRow = -1; // so the row is not updated
editRow(index);
}//GEN-LAST:event_removeParamButtonActionPerformed
private void addParamButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addParamButtonActionPerformed
arguments.add("");
//comments.add("");
getListModel().fireIntervalAdded(getListModel().getSize() - 1, getListModel().getSize() - 1);
editRow(getListModel().getSize() - 1);
}//GEN-LAST:event_addParamButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea mainCommentTextArea;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JList paramsList;
private javax.swing.JPanel jPanel3;
private javax.swing.JButton addParamButton;
private javax.swing.JButton removeParamButton;
private javax.swing.JPanel jPanel4;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JEditorPane codePane;
// End of variables declaration//GEN-END:variables
/** List model for the list of parameters */
protected class ParamsListModel extends AbstractListModel {
static final long serialVersionUID =6832148996617470334L;
public ParamsListModel () {
}
public int getSize() {
return arguments.size();
}
public Object getElementAt(int index) {
return "{" + index + "} " + (String)arguments.get(index);
}
public void fireContentsChanged(int index0, int index1) {
super.fireContentsChanged(this, index0, index1);
}
public void fireIntervalAdded(int index0, int index1) {
super.fireIntervalAdded(this, index0, index1);
}
public void fireIntervalRemoved(int index0, int index1) {
super.fireIntervalRemoved(this, index0, index1);
}
}
}